/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.model;
import com.db.SqlManager;
import com.exception.DataException;
import com.javabeans.Aula;
import com.javabeans.Carrera;
import com.javabeans.DiaSemana;
import com.javabeans.ItinerarioGrupo;
import com.javabeans.ItinerarioHorario;
import com.javabeans.Materia;
import com.javabeans.PeriodoDia;
import com.javabeans.Usuario;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
 * @author Administrador
 */
public class AdminItinerarioGrupo implements ItinerarioGrupoManager{
    private Connection c;

    public AdminItinerarioGrupo(Connection c){
        this.c = c;
    }
    
    public int getIdItinerarioGrupo() throws DataException{
        int res = 0;
        ResultSet rs = null;
        PreparedStatement preSt = null;
        String query = "SELECT IFNULL(max(IDITINERARIO_GRUPO)+1,1) AS ID FROM ITINERARIO_GRUPO";
        try{
            preSt = c.prepareStatement(query);
            rs = preSt.executeQuery();
            rs.next();
            res = rs.getInt("ID");
        }catch(SQLException e){
            throw new DataException(" AdminItinerarioGrupo -> getIdItinerarioGrupo() "+e.getMessage());
        }finally{
            SqlManager.closeRs(rs);
            SqlManager.closePreSt(preSt);
        }
        return res;
    }
    
    @Override
    public void saveItinerarioGrupo(ItinerarioGrupo ig)throws DataException {
        PreparedStatement preSt = null;
        try{
            String query = "INSERT INTO ITINERARIO_GRUPO VALUES("+ig.getIdItinerarioGrupo();
            query += ", "+ig.getNroGrupo()+","+ig.isLimitado();
            query += ", "+ig.getCupo()+","+ig.getIdDocente()+","+ig.getIdFacultad()+")";            
            preSt = c.prepareStatement(query);
            preSt.executeUpdate();
        }catch(SQLException ex){
            throw new DataException(" AdminItinerarioGrupo -> saveItinerarioGrupo(ItinerarioGrupo ig) "+ex.getMessage());
        }finally{
            SqlManager.closePreSt(preSt);
        }
    }
    
    @Override
    public void updateItinerarioGrupo(ItinerarioGrupo ig)throws DataException{
        PreparedStatement preSt = null;
        try{
            String query = "UPDATE ITINERARIO_GRUPO SET NRO_GRUPO = "+ig.getNroGrupo();
            query+= ", LIMITADO = "+ig.isLimitado();
            query+= ", CUPO = "+ig.getCupo()+" , IDDOCENTE="+ig.getIdDocente();
            query+= " WHERE IDITINERARIO_GRUPO="+ig.getIdItinerarioGrupo();            
            preSt = c.prepareStatement(query);
            preSt.executeUpdate();
        }catch(SQLException ex){
            throw new DataException(" AdminItinerarioGrupo -> updateItinerarioGrupo(ItinerarioGrupo ig) "+ex.getMessage());
        }finally{
            SqlManager.closePreSt(preSt);
        }
    }
    
    @Override
    public void deleteItinerarioGrupo(int idItinerarioGrupo)throws DataException{
        PreparedStatement preSt = null;
        try{
            String query = "DELETE FROM ITINERARIO_GRUPO_MATERIA WHERE IDITINERARIO_GRUPO="+idItinerarioGrupo;
            preSt = c.prepareStatement(query);
            preSt.executeUpdate();
            
            query = "DELETE FROM ITINERARIO_HORARIO WHERE IDITINERARIO_GRUPO="+idItinerarioGrupo;
            preSt = c.prepareStatement(query);
            preSt.executeUpdate();
            
            query = "DELETE FROM ITINERARIO_GRUPO WHERE IDITINERARIO_GRUPO="+idItinerarioGrupo;
            preSt = c.prepareStatement(query);
            preSt.executeUpdate();
        }catch(SQLException ex){
            throw new DataException(" AdminItinerarioGrupo -> deleteItinerarioGrupo(int idItinerarioGrupo) "+ex.getMessage());
        }finally{
            SqlManager.closePreSt(preSt);
        }
    }
    
    
    
    public List<ItinerarioGrupo> getItiGruposAllPorCarr(int idCarrera) throws DataException{
        List<ItinerarioGrupo> grupos = new ArrayList<ItinerarioGrupo>();
        ResultSet rs = null;
        ResultSet rs2 = null;
        PreparedStatement preSt = null;
        try{
            String query = "SELECT I.IDITINERARIO_GRUPO";
            query += ", I.NRO_GRUPO";
            query += ", I.LIMITADO";
            query += ", I.CUPO";
            query += ", I.IDDOCENTE";
            query += ", CONCAT(D.NOMBRE,' ',D.APELLIDO) NOMBRE";
            query += " FROM ITINERARIO_GRUPO I";
            query += " INNER JOIN USUARIO D ON I.IDDOCENTE=D.IDUSUARIO";
            query += " INNER JOIN (ITINERARIO_GRUPO_MATERIA IGM INNER JOIN MATERIA M ON IGM.IDCARRERA=M.IDCARRERA AND IGM.IDMATERIA=M.IDMATERIA)";
            query += " ON I.IDITINERARIO_GRUPO=IGM.IDITINERARIO_GRUPO";
            query += " AND IGM.IDCARRERA="+idCarrera;
            query += " ORDER BY M.NOMBRE";            
            preSt = c.prepareStatement(query);
            rs = preSt.executeQuery();
            while(rs.next()){
                ItinerarioGrupo ig = new ItinerarioGrupo();
                ig.setIdItinerarioGrupo(rs.getInt("I.IDITINERARIO_GRUPO"));
                ig.setNroGrupo(rs.getInt("I.NRO_GRUPO"));
                ig.setLimitado(rs.getBoolean("I.LIMITADO"));
                ig.setCupo(rs.getInt("I.CUPO"));
                ig.setIdDocente(rs.getInt("I.IDDOCENTE"));
                Usuario docente = new Usuario();
                docente.setNombre(rs.getString("NOMBRE"));
                ig.setDocente(docente);
                
                List<Materia> materias = new ArrayList<Materia>();
                List<ItinerarioHorario> ihorarios = new ArrayList<ItinerarioHorario>();
                query = "SELECT IGM.IDCARRERA";
                query += ", IGM.IDMATERIA";
                query += ", C.NOMBRE NOM_CARRERA";
                query += ", C.SIGLA SIGLA_CARRERA";
                query += ", M.NOMBRE NOM_MATERIA";
                query += ", M.SIGLA SIGLA_MATERIA";
                query += " FROM ITINERARIO_GRUPO_MATERIA IGM";
                query += " INNER JOIN CARRERA C ON IGM.IDCARRERA=C.IDCARRERA";
                query += " INNER JOIN MATERIA M ON IGM.IDCARRERA=M.IDCARRERA AND IGM.IDMATERIA=M.IDMATERIA";
                query += " WHERE IGM.IDITINERARIO_GRUPO="+ig.getIdItinerarioGrupo();                
                preSt = c.prepareStatement(query);
                rs2 = preSt.executeQuery();
                while(rs2.next()){
                    Materia m = new Materia();
                    m.setIdMateria(rs2.getInt("IGM.IDMATERIA"));
                    m.setNombre(rs2.getString("NOM_MATERIA"));
                    m.setSigla(rs2.getString("SIGLA_MATERIA"));
                    Carrera ca = new Carrera();
                    ca.setIdCarrera(rs2.getInt("IGM.IDCARRERA"));
                    ca.setNombre(rs2.getString("NOM_CARRERA"));
                    ca.setSigla(rs2.getString("SIGLA_CARRERA"));
                    m.setCarrera(ca);
                    materias.add(m);
                }
                ig.setMaterias(materias);
                // adicionamos horarios
                query = "SELECT H.IDDIA_SEMANA";
                query += ", H.IDPERIODO_DIA";
                query += ", DATE_FORMAT(PD.HORAINI,'%H:%i') HORAINI";
                query += ", DATE_FORMAT(PD.HORAFIN,'%H:%i') HORAFIN";
                query += ", DS.NOMBRE";
                query += ", H.IDAULA , A.NRO, A.DESCRIPCION";
                query += " FROM ITINERARIO_HORARIO H";
                query += " INNER JOIN PERIODO_DIA PD ON H.IDFACULTAD=PD.IDFACULTAD AND H.IDPERIODO_DIA=PD.IDPERIODO_DIA";
                query += " INNER JOIN DIA_SEMANA DS ON H.IDDIA_SEMANA=DS.IDDIA_SEMANA";
                query += " INNER JOIN AULA A ON H.IDAULA=A.IDAULA";
                query += " WHERE H.IDITINERARIO_GRUPO="+ig.getIdItinerarioGrupo();
                query += " ORDER BY DS.ORDEN";                
                preSt = c.prepareStatement(query);
                rs2 = preSt.executeQuery();
                while(rs2.next()){
                    ItinerarioHorario ih = new ItinerarioHorario();
                    ih.setIdItinerarioGrupo(ig.getIdItinerarioGrupo());
                    ih.setIdDiaSemana(rs2.getInt("H.IDDIA_SEMANA"));
                    ih.setIdPeriodoDia(rs2.getInt("H.IDPERIODO_DIA"));
                    ih.setIdAula(rs2.getInt("H.IDAULA"));
                    
                    DiaSemana ds = new DiaSemana();
                    ds.setNombre(rs2.getString("DS.NOMBRE"));
                    PeriodoDia pd = new PeriodoDia();
                    pd.setHoraIni(rs2.getString("HORAINI"));
                    pd.setHoraFin(rs2.getString("HORAFIN"));
                    Aula a = new Aula();
                    a.setNro(rs2.getString("A.NRO"));
                    a.setDescripcion(rs2.getString("A.DESCRIPCION"));
                    
                    ih.setPeriodoDia(pd);
                    ih.setDiaSemana(ds);
                    ih.setAula(a);
                    ihorarios.add(ih);
                }
                ig.setItiHorarios(ihorarios);
                grupos.add(ig);
            }
        }catch(SQLException e){
            throw new DataException(" AdminItinerarioGrupo -> getItiGruposAllPorCarr(int idCarrera) e = "+e.getMessage());
        }finally{
            SqlManager.closeRs(rs);
            SqlManager.closeRs(rs2);
            SqlManager.closePreSt(preSt);
        }
        return grupos;
    }
    
    // en lo posible no usar este método por que ocupa demaciado memoria
    public List<ItinerarioGrupo> getItiGruposAllPorFacultad(int idFacultad) throws DataException{
        List<ItinerarioGrupo> grupos = new ArrayList<ItinerarioGrupo>();
        ResultSet rs = null;
        ResultSet rs2 = null;
        PreparedStatement preSt = null;
        try{
            String query = "SELECT I.IDITINERARIO_GRUPO";
            query += ", I.NRO_GRUPO";
            query += ", I.LIMITADO";
            query += ", I.CUPO";
            query += ", I.IDDOCENTE";
            query += ", CONCAT(D.NOMBRE,' ',D.APELLIDO) NOMBRE, C.NOMBRE";
            query += " FROM ITINERARIO_GRUPO I";
            query += " INNER JOIN USUARIO D ON I.IDDOCENTE=D.IDUSUARIO";
            query += " INNER JOIN (ITINERARIO_GRUPO_MATERIA IGM INNER JOIN MATERIA M ON IGM.IDCARRERA=M.IDCARRERA AND IGM.IDMATERIA=M.IDMATERIA";
            query += " INNER JOIN CARRERA C ON IGM.IDCARRERA=C.IDCARRERA AND C.IDFACULTAD="+idFacultad+")";
            query += " ON I.IDITINERARIO_GRUPO=IGM.IDITINERARIO_GRUPO";
            query += " ORDER BY C.NOMBRE, M.NOMBRE";            
            preSt = c.prepareStatement(query);
            rs = preSt.executeQuery();
            while(rs.next()){
                ItinerarioGrupo ig = new ItinerarioGrupo();
                ig.setIdItinerarioGrupo(rs.getInt("I.IDITINERARIO_GRUPO"));
                ig.setNroGrupo(rs.getInt("I.NRO_GRUPO"));
                ig.setLimitado(rs.getBoolean("I.LIMITADO"));
                ig.setCupo(rs.getInt("I.CUPO"));
                ig.setIdDocente(rs.getInt("I.IDDOCENTE"));
                ig.setAux(rs.getString("C.NOMBRE"));
                Usuario docente = new Usuario();
                docente.setNombre(rs.getString("NOMBRE"));
                ig.setDocente(docente);
                
                List<Materia> materias = new ArrayList<Materia>();
                List<ItinerarioHorario> ihorarios = new ArrayList<ItinerarioHorario>();
                query = "SELECT IGM.IDCARRERA";
                query += ", IGM.IDMATERIA";
                query += ", C.NOMBRE NOM_CARRERA";
                query += ", C.SIGLA SIGLA_CARRERA";
                query += ", M.NOMBRE NOM_MATERIA";
                query += ", M.SIGLA SIGLA_MATERIA";
                query += " FROM ITINERARIO_GRUPO_MATERIA IGM";
                query += " INNER JOIN CARRERA C ON IGM.IDCARRERA=C.IDCARRERA";
                query += " INNER JOIN MATERIA M ON IGM.IDCARRERA=M.IDCARRERA AND IGM.IDMATERIA=M.IDMATERIA";
                query += " WHERE IGM.IDITINERARIO_GRUPO="+ig.getIdItinerarioGrupo();                
                preSt = c.prepareStatement(query);
                rs2 = preSt.executeQuery();
                while(rs2.next()){
                    Materia m = new Materia();
                    m.setIdMateria(rs2.getInt("IGM.IDMATERIA"));
                    m.setNombre(rs2.getString("NOM_MATERIA"));
                    m.setSigla(rs2.getString("SIGLA_MATERIA"));
                    Carrera ca = new Carrera();
                    ca.setIdCarrera(rs2.getInt("IGM.IDCARRERA"));
                    ca.setNombre(rs2.getString("NOM_CARRERA"));
                    ca.setSigla(rs2.getString("SIGLA_CARRERA"));
                    m.setCarrera(ca);
                    materias.add(m);
                }
                ig.setMaterias(materias);
                // adicionamos horarios
                query = "SELECT H.IDDIA_SEMANA";
                query += ", H.IDPERIODO_DIA";
                query += ", DATE_FORMAT(PD.HORAINI,'%H:%i') HORAINI";
                query += ", DATE_FORMAT(PD.HORAFIN,'%H:%i') HORAFIN";
                query += ", DS.NOMBRE";
                query += ", H.IDAULA , A.NRO, A.DESCRIPCION";
                query += " FROM ITINERARIO_HORARIO H";
                query += " INNER JOIN PERIODO_DIA PD ON H.IDFACULTAD=PD.IDFACULTAD AND H.IDPERIODO_DIA=PD.IDPERIODO_DIA";
                query += " INNER JOIN DIA_SEMANA DS ON H.IDDIA_SEMANA=DS.IDDIA_SEMANA";
                query += " INNER JOIN AULA A ON H.IDAULA=A.IDAULA";
                query += " WHERE H.IDITINERARIO_GRUPO="+ig.getIdItinerarioGrupo();
                query += " ORDER BY DS.ORDEN";                
                preSt = c.prepareStatement(query);
                rs2 = preSt.executeQuery();
                while(rs2.next()){
                    ItinerarioHorario ih = new ItinerarioHorario();
                    ih.setIdItinerarioGrupo(ig.getIdItinerarioGrupo());
                    ih.setIdDiaSemana(rs2.getInt("H.IDDIA_SEMANA"));
                    ih.setIdPeriodoDia(rs2.getInt("H.IDPERIODO_DIA"));
                    ih.setIdAula(rs2.getInt("H.IDAULA"));
                    
                    DiaSemana ds = new DiaSemana();
                    ds.setNombre(rs2.getString("DS.NOMBRE"));
                    PeriodoDia pd = new PeriodoDia();
                    pd.setHoraIni(rs2.getString("HORAINI"));
                    pd.setHoraFin(rs2.getString("HORAFIN"));
                    Aula a = new Aula();
                    a.setNro(rs2.getString("A.NRO"));
                    a.setDescripcion(rs2.getString("A.DESCRIPCION"));
                    
                    ih.setPeriodoDia(pd);
                    ih.setDiaSemana(ds);
                    ih.setAula(a);
                    ihorarios.add(ih);
                }
                ig.setItiHorarios(ihorarios);
                grupos.add(ig);
            }
        }catch(SQLException e){
            throw new DataException(" AdminItinerarioGrupo -> getItiGruposAllPorFacultad(int idFacultad) e = "+e.getMessage());
        }finally{
            SqlManager.closeRs(rs);
            SqlManager.closeRs(rs2);
            SqlManager.closePreSt(preSt);
        }
        return grupos;
    }
    
    public ItinerarioGrupo getItinerarioGrupo(int idItinerarioGrupo) throws DataException{
        int idFacultad = 0;
        int i = 0;
        ItinerarioGrupo ig = new ItinerarioGrupo();
        ResultSet rs = null;
        PreparedStatement preSt = null;
        String query = "";
        try{
            query = "SELECT I.NRO_GRUPO";
            query += ", I.LIMITADO";
            query += ", I.CUPO";
            query += ", I.IDDOCENTE";
            query += ", CONCAT(D.NOMBRE,' ',D.APELLIDO) NOMBRE";
            query += " FROM ITINERARIO_GRUPO I";
            query += " INNER JOIN USUARIO D ON I.IDDOCENTE=D.IDUSUARIO";
            query += " INNER JOIN (ITINERARIO_GRUPO_MATERIA IGM INNER JOIN MATERIA M ON IGM.IDCARRERA=M.IDCARRERA AND IGM.IDMATERIA=M.IDMATERIA)";
            query += " ON I.IDITINERARIO_GRUPO=IGM.IDITINERARIO_GRUPO";
            query += " WHERE I.IDITINERARIO_GRUPO="+idItinerarioGrupo;            
            preSt = c.prepareStatement(query);
            rs = preSt.executeQuery();
            if(rs.next()){
                ig.setIdItinerarioGrupo(idItinerarioGrupo);
                ig.setNroGrupo(rs.getInt("I.NRO_GRUPO"));
                ig.setLimitado(rs.getBoolean("I.LIMITADO"));
                ig.setCupo(rs.getInt("I.CUPO"));
                ig.setIdDocente(rs.getInt("I.IDDOCENTE"));
                Usuario docente = new Usuario();
                docente.setNombre(rs.getString("NOMBRE"));
                
                List<Materia> materias = new ArrayList<Materia>();
                List<ItinerarioHorario> ihorarios = new ArrayList<ItinerarioHorario>();
                query = "SELECT IGM.IDCARRERA";
                query += ", IGM.IDMATERIA";
                query += ", C.NOMBRE NOM_CARRERA";
                query += ", C.SIGLA SIGLA_CARRERA";
                query += ", C.IDFACULTAD";
                query += ", M.NOMBRE NOM_MATERIA";
                query += ", M.SIGLA SIGLA_MATERIA";
                query += " FROM ITINERARIO_GRUPO_MATERIA IGM";
                query += " INNER JOIN CARRERA C ON IGM.IDCARRERA=C.IDCARRERA";
                query += " INNER JOIN MATERIA M ON IGM.IDCARRERA=M.IDCARRERA AND IGM.IDMATERIA=M.IDMATERIA";
                query += " WHERE IGM.IDITINERARIO_GRUPO="+idItinerarioGrupo;                
                preSt = c.prepareStatement(query);
                rs = preSt.executeQuery();
                while(rs.next()){
                    Materia m = new Materia();
                    m.setIdCarrera(rs.getInt("IGM.IDCARRERA"));
                    m.setIdMateria(rs.getInt("IGM.IDMATERIA"));
                    m.setNombre(rs.getString("NOM_MATERIA"));
                    m.setSigla(rs.getString("SIGLA_MATERIA"));
                    Carrera ca = new Carrera();
                    ca.setIdCarrera(m.getIdCarrera());
                    ca.setNombre(rs.getString("NOM_CARRERA"));
                    ca.setSigla(rs.getString("SIGLA_CARRERA"));
                    m.setCarrera(ca);
                    materias.add(m);
                    if(i == 0)
                        idFacultad = rs.getInt("C.IDFACULTAD");
                    i++;
                }
                ig.setMaterias(materias);
                // cargamos los itinerarios hotrarios
                query = "SELECT H.IDDIA_SEMANA";
                query += ", H.IDPERIODO_DIA";
                query += ", DATE_FORMAT(PD.HORAINI,'%H:%i') HORAINI";
                query += ", DATE_FORMAT(PD.HORAFIN,'%H:%i') HORAFIN";
                query += ", DS.NOMBRE";
                query += ", H.IDAULA , A.NRO, A.DESCRIPCION";
                query += " FROM ITINERARIO_HORARIO H";
                query += " INNER JOIN PERIODO_DIA PD ON H.IDFACULTAD=PD.IDFACULTAD AND H.IDPERIODO_DIA=PD.IDPERIODO_DIA AND PD.IDFACULTAD="+idFacultad;
                query += " INNER JOIN DIA_SEMANA DS ON H.IDDIA_SEMANA=DS.IDDIA_SEMANA";
                query += " INNER JOIN AULA A ON H.IDAULA=A.IDAULA";
                query += " WHERE H.IDITINERARIO_GRUPO="+idItinerarioGrupo;
                query += " ORDER BY DS.ORDEN";
                preSt = c.prepareStatement(query);
                rs = preSt.executeQuery();
                while(rs.next()){
                    ItinerarioHorario ih = new ItinerarioHorario();
                    ih.setIdItinerarioGrupo(idItinerarioGrupo);
                    ih.setIdFacultad(idFacultad);
                    ih.setIdDiaSemana(rs.getInt("H.IDDIA_SEMANA"));
                    ih.setIdPeriodoDia(rs.getInt("H.IDPERIODO_DIA"));
                    ih.setIdAula(rs.getInt("H.IDAULA"));
                    
                    DiaSemana ds = new DiaSemana();
                    ds.setNombre(rs.getString("DS.NOMBRE"));
                    PeriodoDia pd = new PeriodoDia();
                    pd.setHoraIni(rs.getString("HORAINI"));
                    pd.setHoraFin(rs.getString("HORAFIN"));
                    Aula a = new Aula();
                    a.setNro(rs.getString("A.NRO"));
                    a.setDescripcion(rs.getString("A.DESCRIPCION"));
                    
                    ih.setPeriodoDia(pd);
                    ih.setDiaSemana(ds);
                    ih.setAula(a);
                    ihorarios.add(ih);
                }
                ig.setItiHorarios(ihorarios);
            }
        }catch(SQLException e){
            throw new DataException(" AdminItinerarioGrupo -> getItinerarioGrupo(int idItinerarioGrupo) query = "+query+" e = "+e.getMessage());
        }finally{
            SqlManager.closeRs(rs);
            SqlManager.closePreSt(preSt);
        }
        return ig;
    }
    
    public List<ItinerarioGrupo> getItiGruposPorFacultadBasic(int idFacultad) throws DataException{
        List<ItinerarioGrupo> grupos = new ArrayList<ItinerarioGrupo>();
        ResultSet rs = null;
        PreparedStatement preSt = null;
        try{
            String query = "SELECT IDITINERARIO_GRUPO";
            query += ", NRO_GRUPO";
            query += ", LIMITADO";
            query += ", CUPO";
            query += ", IDDOCENTE";
            query += ", IDFACULTAD";
            query += " FROM ITINERARIO_GRUPO";
            query += " WHERE IDFACULTAD="+idFacultad;            
            preSt = c.prepareStatement(query);
            rs = preSt.executeQuery();
            while(rs.next()){
                ItinerarioGrupo ig = new ItinerarioGrupo();
                ig.setIdItinerarioGrupo(rs.getInt("IDITINERARIO_GRUPO"));
                ig.setNroGrupo(rs.getInt("NRO_GRUPO"));
                ig.setLimitado(rs.getBoolean("LIMITADO"));
                ig.setCupo(rs.getInt("CUPO"));
                ig.setIdDocente(rs.getInt("IDDOCENTE"));
                ig.setIdFacultad(rs.getInt("IDFACULTAD"));
                grupos.add(ig);
            }
        }catch(SQLException e){
            throw new DataException(" AdminItinerarioGrupo -> getItiGruposPorFacultadBasic(int idFacultad) e = "+e.getMessage());
        }finally{
            SqlManager.closeRs(rs);
            SqlManager.closePreSt(preSt);
        }
        return grupos;
    }
    
    @Override
    public int getNroGrupo(int idCarrera, int idMateria) throws DataException {
        int res = 0;
        ResultSet rs = null;
        PreparedStatement preSt = null;
        String query = "SELECT IFNULL(max(NRO_GRUPO)+1,1) AS NRO_GRUPO FROM ITINERARIO_GRUPO I";
        query += " INNER JOIN ITINERARIO_GRUPO_MATERIA IGM ON I.IDITINERARIO_GRUPO=IGM.IDITINERARIO_GRUPO";
        query += " AND IGM.IDCARRERA="+idCarrera+" AND IGM.IDMATERIA="+idMateria;
        try{
            preSt = c.prepareStatement(query);
            rs = preSt.executeQuery();
            rs.next();
            res = rs.getInt("NRO_GRUPO");
        }catch(SQLException e){
            throw new DataException(" AdminItinerarioGrupo -> getNroGrupo() "+e.getMessage());
        }finally{
            SqlManager.closeRs(rs);
            SqlManager.closePreSt(preSt);
        }
        return res;
    }
}
